package br.uvv.sao.rn;

import java.io.Serializable;
import java.util.List;

import br.uvv.sao.dao.PermissaoDAO;
import br.uvv.sao.domain.PaginasImplementadas;
import br.uvv.sao.domain.Perfil;
import br.uvv.sao.domain.Permissao;

public class PermissaoRN implements Serializable {
	private static final long serialVersionUID = 1188039965778521088L;
	
	private PermissaoDAO permissaoDAO = new PermissaoDAO();
	
	public boolean salvar(Perfil perfilInstance,
			List<PaginasImplementadas> permissaoSourceList,
			List<PaginasImplementadas> permissaoTargetList) {
		try {
			//agora vamos adicionar as novas permissoes
			for (PaginasImplementadas pagina : permissaoTargetList) {
				System.out.println(pagina.getId());
				if(pagina.getId() != null){
					Permissao permissao = permissaoDAO.getPermissao(perfilInstance, pagina);
					if(permissaoNaoEhNula(permissao)){
						permissaoDAO.atualizarPermissao(permissao);
					}else{
						permissaoDAO.salvarPermissao(perfilInstance, pagina);
					}
				}
			}
			//primeiro vamos remover as que foram retiradas
			for (PaginasImplementadas pagina : permissaoSourceList) {
				Permissao permissao = permissaoDAO.getPermissao(perfilInstance, pagina);
				if(permissaoNaoEhNula(permissao)){
					permissaoDAO.removerPermissao(permissao);
				}
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	private Boolean permissaoNaoEhNula(Permissao permissao){
		try {
			if(permissao.getId() > 0){
				return true;
			}
		} catch (Exception e) {
			return false;
		}
		return false;
	}

	public List<Perfil> listarPerfis(int first, int pageSize, String sortField,
			boolean sortOrder, String nome) {
		return permissaoDAO.listarPerfis(first, pageSize, sortField, sortOrder, nome);
	}

	public int perfilCount(String nome) {
		return permissaoDAO.perfilCount(nome);
	}

	public List<PaginasImplementadas> listarPermissaoSource(
			Perfil perfilInstance, List<PaginasImplementadas> paginas) {
		return permissaoDAO.listarPermissaoSource(perfilInstance,paginas);
	}

	public List<PaginasImplementadas> listarPermissaoTarget(
			Perfil perfilInstance) {
		return permissaoDAO.listarPermissaoTarget(perfilInstance);
	}

	public List<Permissao> listarPermissoes(int first, int pageSize,
			String sortField, boolean sortOrder, Perfil perfilInstance) {
		return permissaoDAO.listarPermissoes(first, pageSize, sortField, sortOrder, perfilInstance);
	}

	public int permissoesCount(Perfil perfilInstance) {
		return permissaoDAO.permissoesCount(perfilInstance);
	}

}
